
/*
*Pool Public Licence version 0.1 or later
*Released on 20th April 2008.
*Any voilations can be repoted at paritosh@wikiocean.net
*What is treated as voilations can be found at www.wikiocean.net/ppl1-voilations* 
******************************************************************************
* The contents of this file are subject Affero GPL v3 and later with additional conditions.
* The additional conditions are to be considered as part of the Affero GPL v3 and later.
* The additional conditions will supersede the Affero GPLv3 and later in case of conflict.
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.gnu.org/licenses/agpl.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Initial Developer of the Original Code is Paritosh Pungaliya.
* created by Paritosh Pungaliya are Copyright (C) Paritosh Pungaliya; All Rights Reserved.
* Contributions are Copyright (C) 2001-2008 Paritosh Pungaliya.

* Objective of the additional terms (license) 
* 1) Is to extend the software freedom to freedom to work.
* 2) To ensure that knowledge is free from monopoly of agencie(s).
* 3) To avoid a situation where big corporates or investors can buy out free software groups and companies and then start milking the communities built around it.
* (this trend can be seen how the openness changes in companies that get Venture Capital funding.)
* (if you agree to this logic I invite you to our group to work together)

* Additional conditions
*  0) Source code will also include
* 	a) data dictionaries, data ontologies which are used to alter the behavior of code or to control           the features of application.
* 	b) Any code generated or derived automatically or manually from this code or logic
*  1) The revenue generated by deploying, implementing , selling services and other activities
*  	 based on this source code should be shared 100%, between the people working on it.
*  2) Capital invested should be given only fixed rate of return or linked to revenue/surplus growth for limited time.
*  3) People working on the project should always have an option to replace the capital provider in full or part with lower cost capital.
*  4) Their should not be any ownership which can be sold as a claim on future profit to be generated from the work of people working on the code.
*  5) Brand thus generated should belong to the group.
*  6) For old and new members revenue sharing should be equal for same work equivalent.
*  7) The share of revenue should be decided by bidding for work before allocation of work within the group.
*  8) Before bidding various method of measuring the work should be clearly defined and published in public domain. Any change in process should also be publised in public domain imediately.
*  9) All data related to to revenue sharing should be published as and when generated in public domain.
*  10) For group of people having size more than 10 people will have to make it open online for others to participate in bids. 
*  11) All people involved in related and sub project will be treated as a group.
*  12) Once this license is being used for a certain code then all and any other software services being provided by the group should complusorilly come under 100% revenue sharing.
*  13) Cross subsidization should not happen under this revenue share, no additional benefit should be drawn from the people, by the employing agency.
*  14) Any position or knowledge or legal structure created relating to people working on code, which adversely affects the spirit of 100% revenue share will be treated as a violation.
*  15) Revenue sharing defined.
*     a) includes direct revenue and also intangible gains like brand, and organization.
*     b) No personal judgment should be involved in judging the distribution of revenue.It has to be pre-defined formula based.
*     c)100% of revenue should be shared before expenses and recievers should have control over what expenses to incur.
*     d)For the work done in any month by contributing group member, working on any project can be given revenue share from the work done by the group, for a maximum of 18 months after that month.
*     e)Revenue should be apportioned to the month in which work is done and not when received.
*  The group fulfilling the above conditions also has to be a wiki ecosystem further defined in www.wekosystem.org or read about Wekosystem at www.wikiocean.net

*  ******************************************************************************
*/  
package sort;

import java.util.Vector;

import timer.ExecutionTimer;
import timer.TimerRecordFile;

public class Ascending implements Sortinterface 
{
 	Vector<Object>tempmap = new Vector<Object>();
 	String buffer[];
 	int starindex=1;
	public void setVector(Vector<Object> vector,int starindex)
	{
		ExecutionTimer t = new ExecutionTimer();
		 t.start();
		this.tempmap = vector;
		this.starindex = starindex;
		t.end();
		TimerRecordFile timerFile=new TimerRecordFile("sort","Ascending","setVector",t.duration());
	}

	public void setbuffer(String[] buffer) 
	{
		ExecutionTimer t = new ExecutionTimer();
		 t.start();
		this.buffer = buffer;
		t.end();
		TimerRecordFile timerFile=new TimerRecordFile("sort","Ascending","setbuffer",t.duration());
	}

	public void getResult() 
	{
		ExecutionTimer t = new ExecutionTimer();
		 t.start();
		for(int i = starindex; i < buffer.length ; i++)
		{
			for(int j = starindex; j < buffer.length-1 ; j++)
			{	
				String splitbufferj[] = buffer[j].split("\t");
				String splitbufferj1[] = buffer[j+1].split("\t");
				for(int k=0;k<tempmap.size();k++)
				{
					//System.out.println(splitbufferj[Integer.parseInt(tempmap.get(k).toString())].trim().toLowerCase());
					String leftString = splitbufferj[Integer.parseInt(tempmap.get(k).toString())].trim().toLowerCase();
					String rightString = splitbufferj1[Integer.parseInt(tempmap.get(k).toString())].toLowerCase().trim();
					
					try 
					{
						double left = Double.parseDouble(leftString);
						double right = Double.parseDouble(rightString);
						if(left>right)
						{	
								String temp = buffer[j];
								buffer[j] = buffer[j+ 1];
								buffer[j + 1] = temp;
								break;
						}
						else if(left<right)
							break;
					}
					catch (NumberFormatException e) 
					{
						if(leftString.compareTo(rightString) > 0)
						{	
								String temp = buffer[j];
								buffer[j] = buffer[j+ 1];
								buffer[j + 1] = temp;
								break;
						}
						else if(leftString.compareTo(rightString)  < 0)
							break;
					}
				}
			}	
		}
		t.end();
		TimerRecordFile timerFile=new TimerRecordFile("sort","Ascending","getResult",t.duration());
	}

	public String[] getbuffer() 
	{	
		return buffer;
	}
	public static void main(String[] args) 
	{
		ExecutionTimer t = new ExecutionTimer();
		 t.start();
		Vector<Object> vect = new Vector<Object>();
		vect.add("0");
		vect.add("1");
		vect.add("2");
		//vect.add("3");
	/*    String buffer2[]=new String[] {"id\tName",
										"1\t901",
										"1\t902",
										"3\t903",
									  };
	
/*	    String buffer2[]=new String[] {"id\ttid\tRate\tName",
				"1\t104\t301\t901",
				"1\t101\t302\t902",
				"3\t102\t303\t903",
				"4\t101\t304",
				"5\t103\t305",
				"6\t102\t306"										
					};*/
	 /*   String buffer2[]=new String[] {"id\tRate\tName",
				"1\t301\t901",
				"1\t302\t902",
				"3\t303\t903",
				"4\t304",
				"5\t305",
				"6\t306"										
					};*/
//	String[] buffer2={"ab","xb","tb","cb","bb"};
	     /*String[] buffer2={"mid\tpid\tPV\tVT\tRef\tFD\tTD",	
					"25\t9\t1\tno$\t0\t0000-00-00 00:00:00\t0000-00-00 00:00:00",	
					"25\t86\t5849\tno$\t46\t0000-00-00 00:00:00\t0000-00-00 00:00:00",	
					"25\t5645\t5891\tno$\t0\t0000-00-00 00:00:00\t0000-00-00 00:00:00",	
					"25\t13\t5949\tno$\t0\t0000-00-00 00:00:00\t0000-00-00 00:00:00",	
					"25\t5689\t5969\tno$\t0\t0000-00-00 00:00:00\t0000-00-00 00:00:00",	
					"25\t9\t1\tno$\t0\t0000-00-00 00:00:00\t0000-00-00 00:00:00",	
					"25\t31\t7272\tno$\t0000-00-00 00:00:00	",
					"25\t7314\t7343\tno$",	
					"25\t25\t25\t0\t0",	
					"25\t25\t25\t0\t0"};	*/
	    /* String[]buffer2={	"a	b	c	d",
	    		 			"d	c	a	b",
	     					"g	z	h	k",
	     					"e	v	d	l",
	     					"z	z	a	a" };*/
		/*String[]buffer2={"5\tb\t43\t21",
					"8\tc\t76\t43",
					"9\tz\t4\tk",
					"1\tv\t2\tl",
					"66\tz\t9\t8"};*/
		/*String[]buffer2={"5\tb\t43\t21",
					"8\tc\t76\t43",
					"9\tz\t4\tk",
					"1\tv\t2\tl",
				"66z\tz\t9\t8"};*/
		String[]buffer2={"0\tz",
				"0\ta",
				"0\te",
				"0\tw",
			"0\tj"};
		Ascending asc = new Ascending();
		asc.setbuffer(buffer2);
		asc.setVector(vect,0);
		asc.getResult(); 
		buffer2 = asc.getbuffer();
		for(int i=0;i<buffer2.length;i++)
			System.out.println(buffer2[i]);
		t.end();
		TimerRecordFile timerFile=new TimerRecordFile("sort","Ascending","main",t.duration());
   	}


}
